package framework;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * Класс-обёртка для работы с properties-файлами Для доступа к файлам используется относительный путь (имя ресурса)
 */
public final class PropertiesResourceManager {

	private Properties	properties	= new Properties();

	public PropertiesResourceManager() {
		properties = new Properties();
		
	}

	public PropertiesResourceManager(String resourceName) {
		properties = appendFromResource(properties, resourceName);
	}

	/**
	 * Конструктор для создания одного объекта из двух properties-файлов
	 * 
	 * @param defaultResourceName Имя 1-го ресурса
	 * @param resourceName Имя 2-го ресурса (переопределяет одинаковые параметры)
	 */
	public PropertiesResourceManager(String defaultResourceName, String resourceName) {
		this(defaultResourceName);
		properties = appendFromResource(new Properties(properties), resourceName);
	}

	/**
	 * Объединение двух properties-файлов (параметры из 2-го файла переопределяют параметры из 1-го)
	 */
	private Properties appendFromResource(Properties objProperties, String resourceName) {
		InputStream inStream = this.getClass().getClassLoader().getResourceAsStream(resourceName);
		if (inStream != null) {
			try {
				objProperties.load(inStream);
				inStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} else {
			System.err.println(String.format("Resource \"%1$s\" could not be found", resourceName));
		}
		return objProperties;
	}

	/**
	 * Получение значения параметра по ключу
	 */
	public String getProperty(String key) {
		return properties.getProperty(key);
	}

	/**
	 * Получение значения параметра по ключу
	 */
	public String getProperty(String key, String defaultValue) {
		return properties.getProperty(key, defaultValue);
	}

	public void setProperty(String key, String value) {
		properties.setProperty(key, value);
	}

}
